Mise à jour Snort 2.9+

Désormais le tutoriel ci-dessous pourrait être devenu obsolète. Snort est passé à la version 3 avec un changement complet sous-jacent (dont la moindre prise en charge des systèmes 32bits). La version 2.9 n’est sans doute plus disponible sur votre système s’il est récent, et l’installation pourrait donc ne pas se terminer correctement. Si jamais vous avez trouvé une piste, n’hésitez pas à nous en faire part, en attendant une mise à jour complète du tutoriel.

Installation de Snort sous Kali Linux

Il est certes un peu déroutant d'installer un système de détection d'intrusion sur une machine d'attaquant, mais nous allons nous baser sur Kali car les étapes sont les mêmes que sur les machines Ubuntu ou Debian. L'installation sur Metasploitable aurait été plus judicieuse, et vous pouvez la tenter de votre côté. Cela dit, elle a posé plusieurs soucis de mon côté et je l'ai donc abandonnée.

Pourquoi Snort ?

Snort est l'un des systèmes de détection d'intrusion réseau parmi les plus populaires. Il s'agissait initialement d'un renifleur réseau, qui a été amélioré au fil des années grâce à la communauté OpenSource est qui est à présent l'une des références du domaine. De plus il est gratuit.

Première étape : installer Snort via le dépôt

L'installation est très simple, elle est détaillée sur le site officiel https://www.snort.org/

Cela dit, nous allons prendre un raccourci pour l'installer et utiliser directement la commande suivante :

sudo apt-get install snort

Si cela ne fonctionne pas, nous allons d'abord éditer le fichier /etc/apt/sources.list  et y ajouter les lignes suivantes :

deb http://ch.archive.ubuntu.com/ubuntu/ saucy main restricted
deb-src http://ch.archive.ubuntu.com/ubuntu/ saucy main restricted
deb http://httpredir.debian.org/debian jessie main
deb-src http://httpredir.debian.org/debian jessie main

Snort devrait être installé dans le dossier /etc/snort/ (et les logs dans /var/log/snort/ ) :

Ce dossier contient le fichier de configuration de snort : snort.conf :

Vous pouvez afficher et éditer ce fichier avec la commande :

etc/nano snort.conf

Le fichier de configuration vous guide dans les étapes de configuration :

Vous pouvez commencer par définir les variables HOME_NET et EXTERNAL_NET. Par défaut, la valeur "any" est correcte. Vous devriez cependant y placer l'adresse IP de votre machine à protéger. (La commande "ifconfig" vous donnera l'adresse IP en question).

Si vous avez des serveurs HTTP, FTP ou autres qui disposent d'autres adresses IP, vous pouvez les placer dans les variables concernées. Sinon elle feront référence à HOME_NET, l'adresse de Kali. Je ne touche à rien de mon côté.

Modifiez ensuite les variables portvar pour correspondre aux ports utilisés par vos services. Encore une fois, la configuration par défaut est valable dans la plupart des cas.

Vous avez ensuite les décodeurs.

Le décodeur de paquet récupère les paquets provenant de différents types d’interfaces réseau et les prépare pour les préprocesseurs ou le moteur de détection. Les préprocesseurs servent à corriger ou interpréter des éléments avant des les envoyer au moteur de détection. Cela évite que des pirates puissent "bypasser" snort en utilisant par exemple des encodages différents pour les chaînes de caractères : "javascript" au lieu de "javascript".

Les étapes suivantes permettent de faire des configurations plus poussées de snort, mais avant cela vous pouvez déjà essayer de le lancer avec la commande :

snort -v

Pour quitter snort, appuyez sur CTRL + C, vous obtiendrez un aperçu de l'activité réseau qu'a étudié snort :

 

Deuxième étape : configurer snort

Snort fonctionne avec des règles (rules). Ces règles sont des fichiers textes qui indiquent à snort comment repérer des attaques. Vous pouvez les apercevoir dans le dossier /etc/snort/rules  :

Nous nous baserons sur la capture d'écran ci-dessous à des fins de compatibilité. Cela dit, snort uniformise ses règles et il est donc tout à fait possible que vous n'ayez pas autant de règles dans le dossier rules. Par ailleurs, en utilisant PulledPork, vous n'avez qu'à définir vos propres règles dans le fichier local.rules, les autres seront automatiquement téléchargées et utilisées via snort et ses partenaires.

Voici par exemple les règles de community-sql-injection.rules  :

Snort va détecter des URL suspectes (que les attaquants vont tester pour entrer dans un site) et lancer l'alerte.

Les règles sont régulièrement mises à jour, c'est pour cela que vous propose de vous inscrire sur la page d'accueil de snort.org (vous devez le faire pour utiliser PulledPork). L'idée est de mettre à jour régulièrement les règles, tout comme l'on met à jour notre antivirus.

Vous pouvez bien sûr créer vos propres règles. Le fichier  local.rules du dossier rules et prévu pour cela.

Vous pouvez l'éditer et y ajouter une règle pour tester snort (la règle doit être sur une ligne) :

alert icmp any any -> $HOME_NET any (msg:"ICMP test detected"; GID:1; sid:10000001; rev:001; classtype:icmp-event;)

L'ajout d'une règle se fait en lui précisant son identifiant unique "sid", un message "msg", un "classtype" selon ce qui est disponible dans le fichier classification.config.

Testons la configuration de snort avec la commande suivante :

sudo snort -T -i eth0 -c /etc/snort/snort.conf

Lançons snort pour tester notre règle :

sudo snort -A console -q -u root -g root -c /etc/snort/snort.conf -i eth0

-console : signifie que l'on affiche les résultats dans la console.

-q : signifie mode silencieux et nous épargne les affichages de bannières...etc.

-c <chemin> : le chemin vers le fichier de config

-i <interface> : l'interface réseau cible

-u et -g : utilisateur et groupe avec lesquels lancer snort.

À noter qu'il est recommandé de ne pas lancer snort en tant que root :

sudo groupadd snort
sudo useradd snort -r -s /sbin/nologin -c SNORT_IDS -g snort

Donnez ensuite les bons droits aux répertoires de snort :

chown -R snort:snort /etc/snort

Vous pourrez lancer la commande avec :

sudo snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i eth0

Le ping icmp est détecté avec succès en utilisant Metasploitable pour tester.

Et un scan nmap est naturellement détecté lui-aussi :

Vous pouvez appuyer sur CTRL + C pour quitter snort.


Installer Snort en tant que Système de Prévention d'Intrusions

Snort peut être installé et utilisé selon deux modes : Système de Détection d'Intrusions (IDS), et système de Prévention d'Intrusions (IPS).

Jusqu'ici nous avons parlé du premier mode. Le deuxième mode semble à première vue préférable car il permet de bloquer dynamiquement des machines qui génèrent des alertes.

Il y a cependant une mise en garde à faire.

Tout d'abord, Snort peut très bien générer des faux positifs, c'est-à-dire lancer des alertes alors qu'aucun comportement véritablement malveillant n'a eu lieu (et cela peut concerner vos propres activités). Pour éviter cette mésaventure, il est donc nécessaire de bien préparer ses règles, et donc de ne pas utiliser toutes les règles par défaut de Snort en mode "Drop" (le mode qui va bloquer les machines générant des alertes).

Ensuite, pour installer Snort en mode IPS, il faut posséder d'au moins 3 cartes réseaux sur votre machine. Snort, dans le mode IPS, crée un pont transparent entre deux segments réseaux. Cela signifie que Snort a deux interfaces réseaux (sans adresses IP et en mode promiscuité). Snort va ensuite écouter le trafic sur les deux interfaces, et lorsqu'un paquet arrive sur l'une d'elles, les données seront inspectées et les règles appliquées. Snort décide de refuser le paquet, ou de l'autoriser et l'envoyer sur l'autre interface sans modifications.

La troisième interface et l'interface réseau habituelle de la machine (avec une adresse IP), qui servira à administrer Snort.

Pour configurer les deux interfaces que Snort doit utiliser, vous pouvez éditer le fichier interfaces :

sudo nano /etc/network/interfaces

Et voici un exemple de configuration (à adapter) :

# Administrative interface
auto eth0
iface eth0 inet dhcp
 
# Première interface par pont
auto eth1
iface eth1 inet manual
    up ifconfig $IFACE 0.0.0.0 up
    up ip link set $IFACE promisc on
    post-up ethtool -K $IFACE gro off
    post-up ethtool -K $IFACE lro off
    down ip link set $IFACE promisc off
    down ifconfig $IFACE down
 
# Deuxième interface par pont
auto eth2
iface eth2 inet manual
    up ifconfig $IFACE 0.0.0.0 up
    up ip link set $IFACE promisc on
    post-up ethtool -K $IFACE gro off
    post-up ethtool -K $IFACE lro off
    down ip link set $IFACE promisc off
    down ifconfig $IFACE down

Vous pouvez ensuite éditer le fichier de configuration /etc/snort/snort.conf pour activer DAQ en ajoutant les lignes suivantes (la configuration DAG se situe vers le début du fichier de configuration) :

config daq: afpacket config daq_mode: inline

Le mode inline de Snort (IPS) est ainsi activé. On teste la configuration avec :

sudo snort -T -c /etc/snort/snort.conf -Q -i eth1:eth2 Et si tout est ok, on peut lancer Snort en mode inline :

sudo /usr/local/bin/snort -A console -Q -c /etc/snort/snort.conf -i eth1:eth2 -N

EDIT: Si vous avez l'erreur ""ERROR: Can't initialize DAQ afpacket (-1) - create_instance: Could not find index for device eth1 Fatal Error, Quitting..."  ", Thibault, membre du cours, indique que les deux précédentes commandes doivent être légèrement modifiées si cela ne fonctionne pas chez vous, voici ce qu'il propose:

sudo snort -T -c /etc/snort/snort.conf -i eth1:eth2

en enlevant donc l'option -Q.

et

sudo snort -T -c usr/local/bin/snort -A console -c /etc/snort/snort.conf -i eth1:eth2 -N 

en ajoutant -T -c.

Les commandes citées dans ce document pouvant varier suivant la version de Snort que vous possédez.

Voir aussi (pour l'erreur DAQ afpacket) : https://www.linuxquestions.org/questions/linux-newbie-8/snort-error-can%27t-start-daq-1-socket-operation-not-permitted-4175480943/


Vos règles doivent ensuite être adaptées en conséquence (placez "drop" à la place de "alert" aux règles dont vous voulez bloquer les machines au lieu de lancer une simple alerte).


Votre aventure avec snort commence seulement, il y a encore beaucoup de choses à connaître, mais vous savez à présent comment utiliser snort de façon basique.

Je vous propose de lire la documentation si vous souhaitez en savoir plus :

Comment créer des règles : http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node27.html

Documentation complète : https://www.snort.org/#documents